My friends and I enjoy making Major tournament fantasy pools. Over the years our pools have gotten more and more involved, with us recently including skins, a quad or worse penalty, and a horse race in our 2022 PGA Championship contest.

The rules for the competition loosely follow the NCAA team competition format. Each entrant drafts a team of 6 players, then the four lowest scores count towards your end of the day score. If you’re unfortunate enough not to have four players make the cut to the weekend, you have to count an 80.

For those who have not heard of a horse race, a horse race usually occurs after the tournament round. A group usually forms to watch one large group of competitors all tee off together off the first tee. Each player completes the hole, where the highest score is eliminated. The remainder play on and this process repeats until there is a winner. Since we are not organizing the PGA Championship, we run our horse race retroactively, tracking scores from hole 1 onwards, eliminating players from the pool who have the highest score, until we reach a winner. With the exception of determining a winner, all players who have the highest score per hole are eliminated. When each of the remaining players tie for the highest score, they all continue to the next hole, until there is a single winner.

I use the ESPN developer API to collect real-time scorecard data, and present a dashboard of live results. This post is meant to walk others (my future self included) through the process of collecting, parsing and automating the data collection, then viewing the Round 1 pool results.

Accessing the data

The API endpoint I use is: https://site.api.espn.com/apis/site/v2/sports/golf/pga/scoreboard. This endpoint does not require a key, and provides scorecard data for the current tournament event.

I find the listviewer::jsonedit() function to be helpful getting familiar with how the JSON data is structured.

url = "https://site.api.espn.com/apis/site/v2/sports/golf/pga/scoreboard"
res = GET(url)
content = jsonlite::fromJSON(content(res, "text"), simplifyVector = TRUE)

listviewer::jsonedit(content, height = "750px", width = "100%", mode = "view")

While the API is fairly general and contains much more information than we are after, hole-by-hole scores are located here: object►events►competitions►0►competitors►0►linescores►0►linescores►0►value► Additionally, we can find data on the player, hole information such as the par and distance, and each player’s starting hole.

Cleaning the data

After exploring the JSON file using the listviewer library, we can move on to restructuring our data into a tidy format for easy use. Specifically, I want to build a data frame containing the player, round, hole, par, and score.

First, I select the latest competition, which we saw above to be the PGA Championship. Then, we flatten the JSON file to a data frame. Once flattened, we have a data frame with the hole scores nested in a list named linescores. Now it may be tough to see, but out linescores list contains the round score, the hole-by-hole scores, the start hole, tee time, and other information.

# first competition in JSON
data = content$events$competitions[[1]]$competitors
data = flatten(data.frame(data), recursive = TRUE)

data %>%
  select(score, athlete.displayName, linescores) %>%
  print_tbl()
score athlete.displayName linescores
-5 Rory McIlroy 65 , NA , 4 , 3 , 3 , 4 , 2 , 3 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 7 , 2 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 33 , NA , 2022-05-20T18:36Z
-4 Will Zalatoris 66 , NA , 3 , 3 , 3 , 4 , 3 , 4 , 4 , 4 , 5 , 4 , 4 , 3 , 4 , 5 , 4 , 3 , 3 , 3 , 6 , 2 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 32 , NA , 2022-05-20T18:25Z
-4 Tom Hoge 66 , NA , 3 , 4 , 5 , 4 , 4 , 3 , 4 , 3 , 3 , 3 , 3 , 4 , 5 , 3 , 3 , 4 , 4 , 4 , 5 , 1 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 49 , NA , 2022-05-20T19:04Z
-3 Matt Kuchar 67 , NA , 3 , 5 , 4 , 5 , 5 , 3 , 4 , 3 , 3 , 4 , 3 , 4 , 4 , 3 , 3 , 3 , 4 , 4 , 5 , 2 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 45 , NA , 2022-05-20T18:20Z
-3 Abraham Ancer 67 , NA , 4 , 5 , 3 , 4 , 4 , 3 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 3 , 5 , 3 , 4 , 6 , 3 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 47 , NA , 2022-05-20T18:42Z
-3 Justin Thomas 67 , NA , 3 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 5 , 3 , 3 , 4 , 5 , 3 , 3 , 4 , 4 , 3 , 5 , 2 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 18 , NA , 2022-05-20T12:49Z
-2 Chris Kirk 68 , NA , 4 , 4 , 4 , 4 , 5 , 2 , 4 , 3 , 3 , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 2 , 0 , 0 , 0 , 0 , 16 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 42 , NA , 2022-05-20T17:47Z
-2 Mito Pereira 68 , NA , 4 , 4 , 4 , 5 , 5 , 2 , 4 , 3 , 4 , 4 , 3 , 5 , 4 , 2 , 4 , 4 , 3 , 4 , 4 , 2 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 43 , NA , 2022-05-20T17:58Z
-2 Xander Schauffele 68 , NA , 3 , 3 , 4 , 4 , 4 , 3 , 4 , 4 , 5 , 4 , 4 , 4 , 4 , 5 , 2 , 4 , 3 , 4 , 4 , 2 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 30 , NA , 2022-05-20T18:03Z
-2 Cameron Smith 68 , NA , 4 , 2 , 6 , 4 , 3 , 4 , 5 , 5 , 4 , 3 , 3 , 3 , 4 , 4 , 3 , 3 , 4 , 4 , 7 , 3 , 0 , 1 , 0 , 7 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 32 , NA , 2022-05-20T18:25Z
-2 Kevin Na 68 , NA , 4 , 3 , 4 , 4 , 3 , 4 , 5 , 4 , 4 , 3 , 5 , 3 , 5 , 4 , 3 , 4 , 3 , 3 , 5 , 3 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 35 , NA , 2022-05-20T18:58Z
-2 Davis Riley 68 , NA , 4 , 3 , 3 , 4 , 3 , 3 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 4 , 5 , 3 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 36 , NA , 2022-05-20T19:09Z
-2 Matt Fitzpatrick 68 , NA , 3 , 3 , 5 , 4 , 5 , 2 , 5 , 3 , 4 , 4 , 2 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 2 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 23 , NA , 2022-05-20T13:44Z
-2 Lucas Herbert 68 , NA , 3 , 3 , 4 , 4 , 2 , 5 , 4 , 4 , 4 , 3 , 5 , 3 , 4 , 4 , 4 , 4 , 3 , 5 , 6 , 4 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 11 , NA , 2022-05-20T13:50Z
-2 Joaquin Niemann 68 , NA , 4 , 5 , 4 , 4 , 5 , 3 , 3 , 4 , 3 , 3 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 2 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 24 , NA , 2022-05-20T13:55Z
-1 Dean Burmester 69 , NA , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 4 , 2 , 4 , 4 , 3 , 4 , 4 , 5 , 5 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 42 , NA , 2022-05-20T17:47Z
-1 Tony Finau 69 , NA , 5 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 2 , 1 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 30 , NA , 2022-05-20T18:03Z
-1 Stewart Cink 69 , NA , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 3 , 4 , 3 , 5 , 4 , 2 , 5 , 4 , 4 , 4 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 46 , NA , 2022-05-20T18:31Z
-1 Thomas Pieters 69 , NA , 3 , 4 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 2 , 3 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 3 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 47 , NA , 2022-05-20T18:42Z
-1 Patrick Reed 69 , NA , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 3 , 5 , 3 , 4 , 5 , 3 , 4 , 3 , 4 , 2 , 1 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 34 , NA , 2022-05-20T18:47Z
-1 Beau Hossler 69 , NA , 4 , 5 , 4 , 4 , 5 , 4 , 3 , 3 , 4 , 3 , 3 , 4 , 5 , 2 , 4 , 4 , 4 , 4 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 49 , NA , 2022-05-20T19:04Z
-1 Talor Gooch 69 , NA , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 3 , 4 , 4 , 4 , 4 , 3 , 5 , 3 , 3 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 1 , NA , 2022-05-20T12:00Z
-1 K.H. Lee 69 , NA , 5 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 3 , 3 , 5 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 2 , NA , 2022-05-20T12:11Z
-1 Webb Simpson 69 , NA , 4 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 3 , 5 , 3 , 2 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 8 , NA , 2022-05-20T13:17Z
-1 Patton Kizzire 69 , NA , 4 , 3 , 4 , 4 , 3 , 4 , 4 , 3 , 5 , 3 , 4 , 4 , 4 , 6 , 2 , 5 , 3 , 4 , 4 , 3 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 13 , NA , 2022-05-20T14:12Z
-1 Aaron Wise 69 , NA , 5 , 4 , 4 , 3 , 4 , 3 , 3 , 3 , 5 , 4 , 4 , 5 , 4 , 3 , 3 , 4 , 4 , 4 , 5 , 4 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 26 , NA , 2022-05-20T14:17Z
E Alex Noren 70 , NA , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 3 , 4 , 3 , 4 , 4 , 5 , 4 , 3 , 4 , 4 , 4 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 27 , NA , 2022-05-20T17:30Z
E Robert MacIntyre 70 , NA , 3 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 4 , 5 , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 2 , 2 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 27 , NA , 2022-05-20T17:30Z
E Tyrrell Hatton 70 , NA , 4 , 3 , 4 , 5 , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 3 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 31 , NA , 2022-05-20T18:14Z
E Max Homa 70 , NA , 4 , 3 , 3 , 4 , 2 , 4 , 4 , 4 , 6 , 4 , 4 , 4 , 5 , 6 , 3 , 4 , 2 , 4 , 4 , 2 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 31 , NA , 2022-05-20T18:14Z
E Viktor Hovland 70 , NA , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 5 , 5 , 3 , 4 , 3 , 4 , 1 , 1 , 0 , 0 , 0 , 16 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 32 , NA , 2022-05-20T18:25Z
E Ryan Fox 70 , NA , 4 , 4 , 3 , 4 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 3 , 3 , 4 , 5 , 4 , 4 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 50 , NA , 2022-05-20T19:15Z
E Francesco Molinari 70 , NA , 4 , 3 , 3 , 5 , 3 , 4 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 6 , 3 , 3 , 4 , 4 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 37 , NA , 2022-05-20T19:20Z
E Gary Woodland 70 , NA , 4 , 3 , 4 , 6 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 3 , 4 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 37 , NA , 2022-05-20T19:20Z
E Brendan Steele 70 , NA , 5 , 5 , 4 , 4 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 5 , 3 , 5 , 4 , 4 , 4 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 52 , NA , 2022-05-20T19:37Z
E Shane Lowry 70 , NA , 4 , 5 , 4 , 3 , 5 , 3 , 4 , 3 , 4 , 5 , 3 , 3 , 5 , 4 , 4 , 4 , 3 , 4 , 3 , 3 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 17 , NA , 2022-05-20T12:38Z
E Russell Henley 70 , NA , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 3 , 3 , 4 , 2 , 2 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 7 , NA , 2022-05-20T13:06Z
+1 Y.E. Yang 71 , NA , 4 , 4 , 4 , 3 , 5 , 2 , 4 , 3 , 4 , 5 , 4 , 3 , 5 , 3 , 4 , 4 , 5 , 5 , 3 , 4 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 40 , NA , 2022-05-20T17:25Z
+1 Kevin Streelman 71 , NA , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 3 , 6 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 2 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 44 , NA , 2022-05-20T18:09Z
+1 Shaun Norris 71 , NA , 4 , 5 , 3 , 5 , 5 , 3 , 3 , 3 , 6 , 3 , 4 , 4 , 5 , 4 , 3 , 3 , 4 , 4 , 5 , 4 , 0 , 1 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 44 , NA , 2022-05-20T18:09Z
+1 Kramer Hickok 71 , NA , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 5 , 4 , 3 , 4 , 5 , 4 , 4 , 4 , 4 , 4 , 1 , 2 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 47 , NA , 2022-05-20T18:42Z
+1 Justin Rose 71 , NA , 4 , 3 , 4 , 4 , 2 , 3 , 4 , 5 , 5 , 4 , 5 , 4 , 5 , 4 , 3 , 5 , 3 , 4 , 4 , 5 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 34 , NA , 2022-05-20T18:47Z
+1 Si Woo Kim 71 , NA , 4 , 4 , 4 , 3 , 4 , 3 , 5 , 4 , 4 , 4 , 3 , 5 , 5 , 3 , 3 , 5 , 4 , 4 , 3 , 4 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 49 , NA , 2022-05-20T19:04Z
+1 Sam Burns 71 , NA , 4 , 3 , 5 , 5 , 3 , 4 , 4 , 3 , 4 , 5 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 1 , 2 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 36 , NA , 2022-05-20T19:09Z
+1 Cameron Young 71 , NA , 4 , 3 , 4 , 5 , 4 , 5 , 4 , 3 , 4 , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 2 , 3 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 36 , NA , 2022-05-20T19:09Z
+1 Justin Harding 71 , NA , 4 , 5 , 5 , 4 , 5 , 3 , 2 , 3 , 4 , 5 , 3 , 4 , 5 , 2 , 4 , 5 , 4 , 4 , 1 , 4 , 0 , 0 , 1 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 15 , NA , 2022-05-20T12:16Z
+1 Seamus Power 71 , NA , 5 , 3 , 3 , 5 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 6 , 3 , 4 , 3 , 4 , 2 , 3 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 4 , NA , 2022-05-20T12:33Z
+1 Jason Day 71 , NA , 4 , 4 , 4 , 4 , 5 , 3 , 5 , 3 , 4 , 4 , 3 , 4 , 4 , 3 , 4 , 5 , 4 , 4 , 1 , 2 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 19 , NA , 2022-05-20T13:00Z
+1 Rickie Fowler 71 , NA , 5 , 4 , 4 , 4 , 5 , 3 , 3 , 3 , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 4 , 3 , 4 , 2 , 3 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 19 , NA , 2022-05-20T13:00Z
+1 Harold Varner III 71 , NA , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 5 , 4 , 3 , 4 , 4 , 2 , 4 , 4 , 4 , 5 , 4 , 5 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 19 , NA , 2022-05-20T13:00Z
+1 Scottie Scheffler 71 , NA , 4 , 4 , 4 , 4 , 3 , 3 , 4 , 3 , 5 , 3 , 3 , 5 , 6 , 3 , 3 , 5 , 5 , 4 , 2 , 5 , 0 , 0 , 1 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 20 , NA , 2022-05-20T13:11Z
+1 Sepp Straka 71 , NA , 4 , 3 , 5 , 5 , 3 , 5 , 4 , 4 , 5 , 4 , 4 , 3 , 4 , 5 , 2 , 4 , 3 , 4 , 2 , 3 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 9 , NA , 2022-05-20T13:28Z
+1 Adam Schenk 71 , NA , 4 , 3 , 4 , 5 , 3 , 5 , 5 , 4 , 4 , 3 , 3 , 4 , 5 , 5 , 3 , 3 , 3 , 5 , 3 , 4 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 9 , NA , 2022-05-20T13:28Z
+1 Tommy Fleetwood 71 , NA , 4 , 4 , 5 , 4 , 5 , 3 , 4 , 2 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 2 , 3 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 22 , NA , 2022-05-20T13:33Z
+1 Charl Schwartzel 71 , NA , 3 , 4 , 4 , 3 , 5 , 3 , 4 , 4 , 3 , 5 , 4 , 4 , 4 , 3 , 4 , 4 , 5 , 5 , 4 , 5 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 23 , NA , 2022-05-20T13:44Z
+2 John Daly 72 , NA , 3 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 4 , 3 , 3 , 4 , 5 , 4 , 4 , 5 , 5 , 5 , 3 , 5 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 40 , NA , 2022-05-20T17:25Z
+2 Adri Arnaus 72 , NA , 4 , 5 , 4 , 5 , 3 , 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 2 , 5 , 4 , 5 , 3 , 3 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 28 , NA , 2022-05-20T17:41Z
+2 Hideki Matsuyama 72 , NA , 4 , 3 , 4 , 5 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 5 , 3 , 4 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 30 , NA , 2022-05-20T18:03Z
+2 Cam Davis 72 , NA , 5 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 5 , 3 , 4 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 45 , NA , 2022-05-20T18:20Z
+2 Jason Dufner 72 , NA , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 5 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 46 , NA , 2022-05-20T18:31Z
+2 Jordan Spieth 72 , NA , 4 , 3 , 3 , 5 , 3 , 5 , 5 , 4 , 5 , 4 , 4 , 4 , 4 , 5 , 4 , 3 , 3 , 4 , 2 , 4 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 33 , NA , 2022-05-20T18:36Z
+2 Bubba Watson 72 , NA , 3 , 3 , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 4 , 5 , 5 , 5 , 4 , 3 , 4 , 3 , 4 , 2 , 4 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 34 , NA , 2022-05-20T18:47Z
+2 Yuki Inamori 72 , NA , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 5 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 51 , NA , 2022-05-20T19:26Z
+2 Laurie Canter 72 , NA , 5 , 3 , 4 , 6 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 39 , NA , 2022-05-20T19:42Z
+2 Lanto Griffin 72 , NA , 5 , 3 , 4 , 5 , 2 , 4 , 4 , 4 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 5 , 4 , 2 , 2 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 39 , NA , 2022-05-20T19:42Z
+2 Alex Cejka 72 , NA , 5 , 3 , 5 , 5 , 5 , 4 , 4 , 3 , 4 , 4 , 4 , 3 , 3 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 3 , NA , 2022-05-20T12:22Z
+2 Jesse Mueller 72 , NA , 2 , 3 , 4 , 5 , 3 , 4 , 5 , 3 , 5 , 4 , 5 , 3 , 4 , 6 , 4 , 5 , 3 , 4 , 2 , 6 , 0 , 0 , 1 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 3 , NA , 2022-05-20T12:22Z
+2 Cameron Tringale 72 , NA , 5 , 6 , 5 , 4 , 5 , 3 , 3 , 3 , 3 , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 2 , 2 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 16 , NA , 2022-05-20T12:27Z
+2 Marc Leishman 72 , NA , 5 , 3 , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 4 , 3 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 6 , NA , 2022-05-20T12:55Z
+2 Keegan Bradley 72 , NA , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 6 , 4 , 4 , 3 , 4 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 6 , NA , 2022-05-20T12:55Z
+2 Collin Morikawa 72 , NA , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 5 , 2 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 20 , NA , 2022-05-20T13:11Z
+2 Henrik Stenson 72 , NA , 4 , 3 , 4 , 6 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 4 , 3 , 4 , 4 , 3 , 2 , 4 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 8 , NA , 2022-05-20T13:17Z
+2 J.J. Spaun 72 , NA , 4 , 3 , 4 , 5 , 3 , 5 , 4 , 4 , 5 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 0 , 2 , 0 , 0 , 0 , 16 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 9 , NA , 2022-05-20T13:28Z
+2 Kevin Kisner 72 , NA , 3 , 5 , 4 , 4 , 5 , 4 , 5 , 3 , 4 , 4 , 3 , 4 , 5 , 3 , 3 , 5 , 4 , 4 , 2 , 4 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 22 , NA , 2022-05-20T13:33Z
+2 Keith Mitchell 72 , NA , 4 , 3 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 3 , 3 , 5 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 10 , NA , 2022-05-20T13:39Z
+2 Chan Kim 72 , NA , 5 , 3 , 5 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 6 , 3 , 4 , 3 , 3 , 1 , 3 , 0 , 0 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 12 , NA , 2022-05-20T14:01Z
+2 Bernd Wiesberger 72 , NA , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 2 , 4 , 5 , 3 , 4 , 4 , 7 , 4 , 3 , 2 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 25 , NA , 2022-05-20T14:06Z
+3 Ryan Palmer 73 , NA , 4 , 3 , 3 , 6 , 3 , 4 , 5 , 4 , 6 , 4 , 5 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 2 , 3 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 27 , NA , 2022-05-20T17:30Z
+3 Matthew Borchert 73 , NA , 3 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 4 , 4 , 3 , 4 , 4 , 4 , 4 , 5 , 4 , 4 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 41 , NA , 2022-05-20T17:36Z
+3 Troy Merritt 73 , NA , 4 , 5 , 4 , 3 , 5 , 4 , 5 , 4 , 5 , 4 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 3 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 41 , NA , 2022-05-20T17:36Z
+3 Jinichiro Kozuma 73 , NA , 4 , 4 , 5 , 4 , 4 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 5 , 3 , 6 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 28 , NA , 2022-05-20T17:41Z
+3 Denny McCarthy 73 , NA , 5 , 3 , 4 , 4 , 3 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 5 , 5 , 3 , 4 , 3 , 4 , 1 , 4 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 31 , NA , 2022-05-20T18:14Z
+3 Matt Jones 73 , NA , 4 , 4 , 5 , 4 , 6 , 3 , 4 , 3 , 4 , 5 , 3 , 4 , 5 , 3 , 3 , 4 , 4 , 5 , 1 , 4 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 48 , NA , 2022-05-20T18:53Z
+3 Min Woo Lee 73 , NA , 4 , 4 , 4 , 4 , 6 , 3 , 5 , 3 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 4 , 4 , 5 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 14 , NA , 2022-05-20T12:05Z
+3 Anirban Lahiri 73 , NA , 5 , 2 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 7 , 3 , 4 , 3 , 4 , 1 , 2 , 0 , 1 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 2 , NA , 2022-05-20T12:11Z
+3 Rich Beem 73 , NA , 4 , 3 , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 4 , 5 , 4 , 5 , 5 , 4 , 4 , 3 , 3 , 1 , 4 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 3 , NA , 2022-05-20T12:22Z
+3 Adam Hadwin 73 , NA , 4 , 4 , 3 , 5 , 5 , 3 , 4 , 3 , 4 , 4 , 3 , 5 , 6 , 4 , 4 , 3 , 4 , 5 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 16 , NA , 2022-05-20T12:27Z
+3 Christiaan Bezuidenhout 73 , NA , 5 , 3 , 4 , 4 , 4 , 6 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 1 , 2 , 0 , 1 , 0 , 14 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 5 , NA , 2022-05-20T12:44Z
+3 Dustin Johnson 73 , NA , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 3 , 4 , 5 , 5 , 3 , 5 , 4 , 4 , 4 , 1 , 4 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 18 , NA , 2022-05-20T12:49Z
+3 Jon Rahm 73 , NA , 5 , 3 , 4 , 4 , 4 , 3 , 4 , 5 , 4 , 4 , 3 , 4 , 6 , 3 , 4 , 4 , 5 , 4 , 2 , 3 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 20 , NA , 2022-05-20T13:11Z
+3 Branden Grace 73 , NA , 4 , 3 , 4 , 4 , 4 , 3 , 5 , 4 , 5 , 4 , 4 , 4 , 5 , 5 , 3 , 4 , 3 , 5 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 8 , NA , 2022-05-20T13:17Z
+3 Louis Oosthuizen 73 , NA , 3 , 6 , 4 , 4 , 4 , 3 , 5 , 3 , 5 , 3 , 2 , 4 , 7 , 3 , 4 , 5 , 4 , 4 , 4 , 3 , 0 , 2 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 21 , NA , 2022-05-20T13:22Z
+3 Daniel Berger 73 , NA , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 5 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 0 , 3 , 0 , 0 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 21 , NA , 2022-05-20T13:22Z
+3 Sergio Garcia 73 , NA , 4 , 6 , 3 , 3 , 5 , 3 , 4 , 3 , 4 , 4 , 3 , 4 , 5 , 3 , 4 , 5 , 5 , 5 , 2 , 3 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 23 , NA , 2022-05-20T13:44Z
+3 Maverick McNealy 73 , NA , 4 , 4 , 4 , 5 , 3 , 3 , 5 , 3 , 5 , 4 , 5 , 4 , 4 , 6 , 3 , 4 , 3 , 4 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 12 , NA , 2022-05-20T14:01Z
+3 Jhonattan Vegas 73 , NA , 3 , 5 , 4 , 4 , 4 , 3 , 4 , 3 , 5 , 4 , 3 , 4 , 5 , 4 , 5 , 5 , 4 , 4 , 2 , 5 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 25 , NA , 2022-05-20T14:06Z
+3 Alex Beach 73 , NA , 4 , 4 , 4 , 3 , 5 , 4 , 3 , 3 , 5 , 3 , 4 , 4 , 5 , 3 , 5 , 5 , 4 , 5 , 3 , 6 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 25 , NA , 2022-05-20T14:06Z
+3 Joel Dahmen 73 , NA , 3 , 5 , 4 , 4 , 5 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 5 , 4 , 5 , 3 , 6 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 26 , NA , 2022-05-20T14:17Z
+4 Sam Horsfield 74 , NA , 3 , 5 , 4 , 4 , 4 , 3 , 3 , 4 , 4 , 5 , 3 , 5 , 5 , 3 , 4 , 6 , 4 , 5 , 3 , 5 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 43 , NA , 2022-05-20T17:58Z
+4 Rikuya Hoshino 74 , NA , 4 , 3 , 4 , 6 , 5 , 2 , 5 , 2 , 4 , 5 , 3 , 5 , 5 , 3 , 4 , 5 , 4 , 5 , 3 , 5 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 45 , NA , 2022-05-20T18:20Z
+4 Tiger Woods 74 , NA , 3 , 3 , 4 , 5 , 2 , 5 , 4 , 4 , 5 , 5 , 5 , 3 , 5 , 5 , 3 , 4 , 4 , 5 , 3 , 7 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 33 , NA , 2022-05-20T18:36Z
+4 Richard Bland 74 , NA , 4 , 4 , 4 , 4 , 7 , 3 , 4 , 3 , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 4 , 0 , 2 , 0 , 1 , 0 , 15 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 48 , NA , 2022-05-20T18:53Z
+4 Garrick Higgo 74 , NA , 4 , 4 , 5 , 4 , 5 , 3 , 5 , 4 , 4 , 4 , 3 , 4 , 4 , 3 , 3 , 5 , 5 , 5 , 2 , 6 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 48 , NA , 2022-05-20T18:53Z
+4 Daniel van Tonder 74 , NA , 5 , 3 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 4 , 4 , 6 , 3 , 5 , 3 , 4 , 3 , 4 , 1 , 3 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 35 , NA , 2022-05-20T18:58Z
+4 Sebastián Muñoz 74 , NA , 5 , 4 , 3 , 4 , 6 , 3 , 4 , 3 , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 1 , 5 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 51 , NA , 2022-05-20T19:26Z
+4 Brian Harman 74 , NA , 5 , 4 , 5 , 6 , 3 , 4 , 4 , 2 , 5 , 4 , 4 , 4 , 4 , 6 , 3 , 4 , 3 , 4 , 0 , 6 , 0 , 0 , 1 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 38 , NA , 2022-05-20T19:31Z
+4 Hudson Swafford 74 , NA , 4 , 5 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 4 , 3 , 4 , 4 , 4 , 1 , 5 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 16 , NA , 2022-05-20T12:27Z
+4 Russell Knox 74 , NA , 4 , 3 , 4 , 5 , 3 , 6 , 4 , 3 , 4 , 4 , 5 , 4 , 4 , 6 , 3 , 5 , 3 , 4 , 1 , 3 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 4 , NA , 2022-05-20T12:33Z
+4 Jason Kokrak 74 , NA , 4 , 4 , 4 , 5 , 4 , 4 , 4 , 5 , 4 , 3 , 5 , 4 , 4 , 5 , 3 , 4 , 3 , 5 , 1 , 5 , 0 , 0 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 5 , NA , 2022-05-20T12:44Z
+4 Zach Johnson 74 , NA , 6 , 3 , 4 , 5 , 3 , 3 , 4 , 4 , 4 , 4 , 5 , 4 , 4 , 5 , 3 , 5 , 4 , 4 , 1 , 3 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 7 , NA , 2022-05-20T13:06Z
+4 Cameron Champ 74 , NA , 4 , 3 , 4 , 5 , 4 , 4 , 4 , 5 , 5 , 3 , 6 , 5 , 4 , 4 , 3 , 4 , 3 , 4 , 2 , 4 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 7 , NA , 2022-05-20T13:06Z
+4 Harry Higgs 74 , NA , 5 , 4 , 4 , 4 , 5 , 3 , 3 , 4 , 4 , 4 , 2 , 4 , 5 , 5 , 3 , 5 , 5 , 5 , 3 , 5 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 24 , NA , 2022-05-20T13:55Z
+4 Luke List 74 , NA , 3 , 3 , 4 , 5 , 4 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 4 , 7 , 2 , 4 , 4 , 4 , 2 , 4 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 13 , NA , 2022-05-20T14:12Z
+5 Kyle Mendoza 75 , NA , 4 , 4 , 4 , 4 , 6 , 4 , 4 , 3 , 4 , 3 , 3 , 5 , 5 , 3 , 5 , 6 , 3 , 5 , 2 , 5 , 0 , 1 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 42 , NA , 2022-05-20T17:47Z
+5 Sadom Kaewkanjana 75 , NA , 5 , 3 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 0 , 5 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 29 , NA , 2022-05-20T17:52Z
+5 Lucas Glover 75 , NA , 4 , 3 , 5 , 5 , 4 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 4 , 5 , 3 , 4 , 3 , 5 , 0 , 5 , 0 , 0 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 35 , NA , 2022-05-20T18:58Z
+5 Lee Westwood 75 , NA , 5 , 3 , 4 , 5 , 3 , 4 , 4 , 3 , 4 , 5 , 5 , 4 , 5 , 4 , 3 , 5 , 4 , 5 , 2 , 7 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 37 , NA , 2022-05-20T19:20Z
+5 Ryan Vermeer 75 , NA , 3 , 3 , 4 , 6 , 3 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 4 , 5 , 3 , 5 , 4 , 5 , 1 , 6 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 38 , NA , 2022-05-20T19:31Z
+5 Brooks Koepka 75 , NA , 5 , 4 , 5 , 5 , 5 , 3 , 4 , 4 , 5 , 4 , 3 , 4 , 5 , 4 , 3 , 4 , 4 , 4 , 1 , 6 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 17 , NA , 2022-05-20T12:38Z
+5 Billy Horschel 75 , NA , 4 , 5 , 4 , 6 , 5 , 4 , 4 , 3 , 4 , 4 , 3 , 5 , 5 , 4 , 4 , 3 , 4 , 4 , 1 , 4 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 22 , NA , 2022-05-20T13:33Z
+5 Erik van Rooyen 75 , NA , 4 , 3 , 5 , 4 , 5 , 3 , 5 , 4 , 5 , 4 , 3 , 4 , 6 , 3 , 3 , 4 , 5 , 5 , 2 , 7 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 24 , NA , 2022-05-20T13:55Z
+6 Shaun Micheel 76 , NA , 4 , 5 , 5 , 4 , 5 , 3 , 4 , 4 , 4 , 3 , 3 , 5 , 4 , 4 , 4 , 6 , 4 , 5 , 2 , 6 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 40 , NA , 2022-05-20T17:25Z
+6 Bio Kim 76 , NA , 4 , 4 , 5 , 4 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 4 , 5 , 2 , 4 , 5 , 6 , 5 , 1 , 5 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 52 , NA , 2022-05-20T19:37Z
+6 Ryan Brehm 76 , NA , 4 , 4 , 6 , 4 , 5 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 5 , 4 , 5 , 5 , 1 , 5 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 14 , NA , 2022-05-20T12:05Z
+6 Corey Conners 76 , NA , 5 , 3 , 4 , 5 , 4 , 6 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 3 , 5 , 4 , 4 , 0 , 4 , 0 , 1 , 0 , 13 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 5 , NA , 2022-05-20T12:44Z
+6 Patrick Cantlay 76 , NA , 4 , 5 , 3 , 5 , 6 , 3 , 4 , 4 , 4 , 4 , 3 , 5 , 6 , 3 , 3 , 4 , 5 , 5 , 2 , 8 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 18 , NA , 2022-05-20T12:49Z
+6 Martin Kaymer 76 , NA , 4 , 3 , 4 , 4 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 5 , 5 , 4 , 5 , 4 , 4 , 2 , 8 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 6 , NA , 2022-05-20T12:55Z
+6 Ian Poulter 76 , NA , 4 , 4 , 4 , 4 , 6 , 3 , 5 , 3 , 4 , 4 , 3 , 5 , 4 , 5 , 4 , 5 , 4 , 5 , 1 , 5 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 21 , NA , 2022-05-20T13:22Z
+6 Matthew Wolff 76 , NA , 4 , 4 , 4 , 5 , 4 , 4 , 5 , 4 , 4 , 5 , 6 , 5 , 5 , 5 , 2 , 3 , 3 , 4 , 2 , 6 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 10 , NA , 2022-05-20T13:39Z
+7 Takumi Kanaya 77 , NA , 4 , 4 , 6 , 4 , 5 , 4 , 4 , 3 , 4 , 5 , 3 , 5 , 4 , 3 , 4 , 5 , 4 , 6 , 1 , 4 , 0 , 2 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 41 , NA , 2022-05-20T17:36Z
+7 Mackenzie Hughes 77 , NA , 4 , 3 , 4 , 5 , 3 , 5 , 4 , 5 , 5 , 4 , 6 , 4 , 4 , 6 , 3 , 4 , 4 , 4 , 0 , 5 , 0 , 1 , 0 , 12 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 29 , NA , 2022-05-20T17:52Z
+7 Padraig Harrington 77 , NA , 4 , 6 , 3 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 3 , 3 , 5 , 4 , 5 , 5 , 4 , 5 , 2 , 7 , 0 , 1 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 46 , NA , 2022-05-20T18:31Z
+7 Pablo Larrazábal 77 , NA , 3 , 4 , 4 , 4 , 5 , 3 , 6 , 4 , 5 , 5 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 5 , 1 , 6 , 0 , 1 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 50 , NA , 2022-05-20T19:15Z
+7 Wyatt Worthington II 77 , NA , 4 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 4 , 5 , 3 , 4 , 5 , 3 , 5 , 4 , 5 , 5 , 0 , 7 , 0 , 0 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 14 , NA , 2022-05-20T12:05Z
+7 Tim Feenstra 77 , NA , 3 , 4 , 3 , 4 , 5 , 4 , 6 , 5 , 5 , 4 , 5 , 5 , 4 , 7 , 3 , 3 , 3 , 4 , 4 , 5 , 0 , 3 , 0 , 6 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 2 , NA , 2022-05-20T12:11Z
+7 Adam Scott 77 , NA , 3 , 4 , 4 , 5 , 4 , 3 , 5 , 3 , 5 , 6 , 4 , 4 , 4 , 4 , 3 , 4 , 8 , 4 , 4 , 5 , 0 , 1 , 0 , 7 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 17 , NA , 2022-05-20T12:38Z
+7 Chad Ramey 77 , NA , 4 , 3 , 4 , 5 , 4 , 5 , 4 , 5 , 6 , 3 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 4 , 1 , 6 , 0 , 1 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 11 , NA , 2022-05-20T13:50Z
+8 Colin Inglis 78 , NA , 4 , 3 , 5 , 5 , 3 , 4 , 4 , 5 , 4 , 4 , 6 , 4 , 5 , 6 , 4 , 4 , 3 , 5 , 0 , 6 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 28 , NA , 2022-05-20T17:41Z
+8 Michael Block 78 , NA , 3 , 3 , 4 , 5 , 4 , 6 , 6 , 6 , 4 , 5 , 5 , 4 , 4 , 5 , 3 , 4 , 3 , 4 , 1 , 3 , 0 , 3 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 29 , NA , 2022-05-20T17:52Z
+8 Nic Ishee 78 , NA , 4 , 5 , 3 , 4 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 6 , 5 , 3 , 4 , 4 , 5 , 7 , 1 , 4 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 43 , NA , 2022-05-20T17:58Z
+8 Shawn Warren 78 , NA , 5 , 5 , 5 , 4 , 5 , 3 , 5 , 4 , 4 , 3 , 3 , 5 , 5 , 3 , 4 , 5 , 5 , 5 , 1 , 9 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 50 , NA , 2022-05-20T19:15Z
+8 Oliver Bekker 78 , NA , 4 , 3 , 5 , 5 , 3 , 5 , 4 , 6 , 5 , 4 , 4 , 5 , 4 , 5 , 4 , 4 , 3 , 5 , 0 , 6 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 38 , NA , 2022-05-20T19:31Z
+8 Dylan Newman 78 , NA , 4 , 3 , 4 , 5 , 6 , 3 , 4 , 4 , 4 , 4 , 5 , 4 , 6 , 5 , 3 , 5 , 4 , 5 , 1 , 4 , 0 , 1 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 39 , NA , 2022-05-20T19:42Z
+8 Brandon Bingaman 78 , NA , 5 , 3 , 6 , 5 , 3 , 4 , 5 , 4 , 6 , 4 , 4 , 3 , 5 , 5 , 3 , 5 , 4 , 4 , 1 , 5 , 0 , 2 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 1 , NA , 2022-05-20T12:00Z
+8 Nicolai Højgaard 78 , NA , 4 , 4 , 4 , 5 , 5 , 3 , 4 , 4 , 5 , 5 , 2 , 4 , 5 , 4 , 4 , 4 , 7 , 5 , 1 , 6 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 15 , NA , 2022-05-20T12:16Z
+8 Scott Stallings 78 , NA , 4 , 4 , 5 , 5 , 3 , 4 , 5 , 5 , 5 , 4 , 4 , 5 , 5 , 6 , 3 , 4 , 3 , 4 , 0 , 8 , 0 , 0 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 4 , NA , 2022-05-20T12:33Z
+8 Joohyung Kim 78 , NA , 4 , 3 , 5 , 5 , 4 , 4 , 5 , 3 , 5 , 4 , 5 , 4 , 4 , 6 , 4 , 4 , 4 , 5 , 1 , 9 , 0 , 0 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 10 , NA , 2022-05-20T13:39Z
+8 Austin Hurt 78 , NA , 4 , 5 , 4 , 5 , 4 , 4 , 4 , 7 , 5 , 5 , 4 , 4 , 5 , 4 , 3 , 4 , 2 , 5 , 2 , 5 , 0 , 1 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 11 , NA , 2022-05-20T13:50Z
+8 Paul Dickinson 78 , NA , 4 , 4 , 5 , 7 , 4 , 3 , 3 , 5 , 4 , 3 , 5 , 4 , 4 , 5 , 5 , 4 , 4 , 5 , 3 , 7 , 0 , 2 , 0 , 6 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 13 , NA , 2022-05-20T14:12Z
+9 Carlos Ortiz 79 , NA , 4 , 6 , 4 , 4 , 6 , 3 , 4 , 4 , 3 , 4 , 4 , 5 , 5 , 5 , 4 , 5 , 4 , 5 , 1 , 6 , 0 , 2 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 44 , NA , 2022-05-20T18:09Z
+9 Casey Pyne 79 , NA , 5 , 5 , 4 , 4 , 6 , 3 , 4 , 5 , 3 , 5 , 3 , 5 , 5 , 4 , 5 , 5 , 4 , 4 , 1 , 8 , 0 , 1 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 52 , NA , 2022-05-20T19:37Z
+9 Ryosuke Kinoshita 79 , NA , 6 , 3 , 4 , 4 , 6 , 4 , 5 , 4 , 5 , 5 , 4 , 4 , 4 , 5 , 4 , 5 , 3 , 4 , 1 , 5 , 0 , 1 , 0 , 10 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 1 , NA , 2022-05-20T12:00Z
+9 Tyler Collet 79 , NA , 4 , 3 , 5 , 5 , 4 , 5 , 4 , 5 , 4 , 5 , 5 , 5 , 5 , 5 , 3 , 4 , 4 , 4 , 0 , 9 , 0 , 0 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 1 , NA , 12 , NA , 2022-05-20T14:01Z
+9 Jared Jones 79 , NA , 4 , 4 , 5 , 4 , 5 , 5 , 4 , 3 , 4 , 4 , 3 , 4 , 6 , 3 , 6 , 5 , 5 , 5 , 0 , 5 , 0 , 2 , 0 , 11 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 26 , NA , 2022-05-20T14:17Z
+11 Zac Oakley 81 , NA , 6 , 5 , 5 , 4 , 5 , 4 , 5 , 3 , 5 , 5 , 3 , 4 , 6 , 4 , 5 , 4 , 4 , 4 , 0 , 9 , 0 , 1 , 0 , 8 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 51 , NA , 2022-05-20T19:26Z
+12 Sean McCarty 82 , NA , 5 , 5 , 4 , 5 , 5 , 3 , 4 , 4 , 4 , 4 , 5 , 4 , 5 , 4 , 5 , 4 , 6 , 6 , 0 , 6 , 0 , 3 , 0 , 9 , NA , 2 , NA , 61 , NA , FALSE , NA , 10 , NA , 15 , NA , 2022-05-20T12:16Z

Lets pull the information we are after, I like to save the results to a list and bind together to a data frame, but any method should work here.

score_data = list()
N = nrow(data) 
for(i in 1:N) {
  
  tmp = data[i, ]
  start = tmp$linescores[[1]]$startTee[[2]]
  player = tmp$athlete.displayName
  scores = tmp$linescores[[1]]$linescores[[1]]
  
  # start hole indicators are reversed
  if(start == 1) {
    hole_list = c(seq(10, 18, 1), seq(1, 9, 1))[1:nrow(scores)]
  } else {
    hole_list = seq(1, 18, 1)[1:nrow(scores)]
  }
  
  out = data.frame(player, 
                   hole_list, 
                   scores)
  
  score_data[[length(score_data) + 1]] = out
  
}
score_data = do.call(rbind.data.frame, score_data)

Now we have our tidy data set, which we can reshape to make our data appear more like a leaderboard.

score_data %>%
  arrange(hole_list) %>%
  tidyr::pivot_wider(id_cols = player, names_from = hole_list, values_from = value, values_fill = NULL) %>%
  mutate(total = rowSums(select(., !contains("player")))) %>%
  arrange(total, player) %>% 
  print_tbl()
player 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 total
Rory McIlroy 4 3 4 4 4 4 4 4 3 4 3 3 4 2 3 4 4 4 65
Tom Hoge 3 4 5 4 4 3 4 3 3 3 3 4 5 3 3 4 4 4 66
Will Zalatoris 4 4 3 4 5 4 3 3 3 3 3 3 4 3 4 4 4 5 66
Abraham Ancer 4 5 3 4 4 3 3 3 4 3 4 4 5 3 3 5 3 4 67
Justin Thomas 3 4 4 4 4 3 4 4 5 3 3 4 5 3 3 4 4 3 67
Matt Kuchar 3 5 4 5 5 3 4 3 3 4 3 4 4 3 3 3 4 4 67
Cameron Smith 3 3 3 4 4 3 3 4 4 4 2 6 4 3 4 5 5 4 68
Chris Kirk 4 4 4 4 5 2 4 3 3 4 3 4 5 3 4 4 4 4 68
Davis Riley 5 4 4 4 4 4 3 3 4 4 3 3 4 3 3 4 4 5 68
Joaquin Niemann 4 5 4 4 5 3 3 4 3 3 3 4 4 3 4 4 4 4 68
Kevin Na 3 5 3 5 4 3 4 3 3 4 3 4 4 3 4 5 4 4 68
Lucas Herbert 3 5 3 4 4 4 4 3 5 3 3 4 4 2 5 4 4 4 68
Matt Fitzpatrick 3 3 5 4 5 2 5 3 4 4 2 4 5 3 4 4 4 4 68
Mito Pereira 4 4 4 5 5 2 4 3 4 4 3 5 4 2 4 4 3 4 68
Xander Schauffele 4 4 4 4 5 2 4 3 4 3 3 4 4 4 3 4 4 5 68
Aaron Wise 5 4 4 3 4 3 3 3 5 4 4 5 4 3 3 4 4 4 69
Beau Hossler 4 5 4 4 5 4 3 3 4 3 3 4 5 2 4 4 4 4 69
Dean Burmester 4 4 4 4 4 3 4 3 4 4 2 4 4 3 4 4 5 5 69
K.H. Lee 3 5 4 4 4 3 4 3 4 5 3 4 5 3 4 4 4 3 69
Patrick Reed 3 5 3 4 5 3 4 3 4 4 3 4 5 3 4 4 4 4 69
Patton Kizzire 3 4 4 4 6 2 5 3 4 4 3 4 4 3 4 4 3 5 69
Stewart Cink 4 4 4 4 5 3 4 3 3 4 3 5 4 2 5 4 4 4 69
Talor Gooch 3 4 4 4 4 3 5 3 3 4 3 4 5 3 4 4 5 4 69
Thomas Pieters 3 4 4 5 5 3 4 4 4 5 2 3 4 3 4 4 4 4 69
Tony Finau 4 3 4 4 5 3 4 3 4 5 3 4 4 3 4 4 4 4 69
Webb Simpson 4 4 4 4 4 3 4 3 5 4 4 4 4 3 4 3 4 4 69
Alex Noren 3 4 4 5 4 3 4 4 4 4 4 4 5 3 4 4 3 4 70
Brendan Steele 5 5 4 4 5 3 3 3 3 3 3 4 5 3 5 4 4 4 70
Francesco Molinari 4 4 4 4 6 3 3 4 4 4 3 3 5 3 4 4 3 5 70
Gary Woodland 4 4 5 3 4 3 4 3 4 4 3 4 6 3 4 5 3 4 70
Max Homa 4 4 4 5 6 3 4 2 4 4 3 3 4 2 4 4 4 6 70
Robert MacIntyre 5 4 4 4 5 3 4 4 4 3 3 4 4 3 4 4 4 4 70
Russell Henley 3 4 4 4 5 3 3 3 4 4 4 4 5 3 4 4 4 5 70
Ryan Fox 4 4 3 4 4 3 5 4 4 4 4 4 5 3 3 3 4 5 70
Shane Lowry 4 5 4 3 5 3 4 3 4 5 3 3 5 4 4 4 3 4 70
Tyrrell Hatton 4 4 4 4 5 3 4 4 3 4 3 4 5 4 3 4 5 3 70
Viktor Hovland 4 3 4 5 5 3 4 3 4 4 3 4 5 3 4 4 4 4 70
Adam Schenk 3 3 4 5 5 3 3 3 5 4 3 4 5 3 5 5 4 4 71
Cameron Young 3 4 4 4 5 3 4 4 4 4 3 4 5 4 5 4 3 4 71
Charl Schwartzel 3 4 4 3 5 3 4 4 3 5 4 4 4 3 4 4 5 5 71
Harold Varner III 4 5 3 4 4 4 4 4 5 4 3 4 4 2 4 4 4 5 71
Jason Day 4 4 4 4 5 3 5 3 4 4 3 4 4 3 4 5 4 4 71
Justin Harding 4 5 5 4 5 3 2 3 4 5 3 4 5 2 4 5 4 4 71
Justin Rose 4 5 4 5 4 3 5 3 4 4 3 4 4 2 3 4 5 5 71
Kevin Streelman 4 4 4 3 4 3 4 3 6 4 3 4 4 4 4 4 4 5 71
Kramer Hickok 3 4 4 4 5 3 4 3 5 4 3 4 5 4 4 4 4 4 71
Rickie Fowler 5 4 4 4 5 3 3 3 4 5 3 4 5 4 4 4 3 4 71
Sam Burns 5 4 4 4 5 3 4 3 4 4 3 5 5 3 4 4 3 4 71
Scottie Scheffler 4 4 4 4 3 3 4 3 5 3 3 5 6 3 3 5 5 4 71
Seamus Power 4 4 4 4 6 3 4 3 4 5 3 3 5 4 3 4 4 4 71
Sepp Straka 4 4 3 4 5 2 4 3 4 4 3 5 5 3 5 4 4 5 71
Shaun Norris 4 5 3 5 5 3 3 3 6 3 4 4 5 4 3 3 4 4 71
Si Woo Kim 4 4 4 3 4 3 5 4 4 4 3 5 5 3 3 5 4 4 71
Tommy Fleetwood 4 4 5 4 5 3 4 2 4 3 4 4 5 3 4 5 4 4 71
Y.E. Yang 4 4 4 3 5 2 4 3 4 5 4 3 5 3 4 4 5 5 71
Adri Arnaus 4 4 4 4 4 2 5 4 5 4 5 4 5 3 4 3 4 4 72
Alex Cejka 4 4 3 3 4 3 5 4 4 5 3 5 5 5 4 4 3 4 72
Bernd Wiesberger 4 4 4 4 4 4 4 4 3 4 2 4 5 3 4 4 7 4 72
Bubba Watson 4 5 5 5 4 3 4 3 4 3 3 4 5 3 4 5 4 4 72
Cam Davis 5 4 4 4 5 3 4 3 4 4 4 4 5 3 4 5 3 4 72
Cameron Tringale 5 6 5 4 5 3 3 3 3 4 3 4 5 3 4 4 4 4 72
Chan Kim 4 4 4 4 6 3 4 3 3 5 3 5 5 3 4 4 4 4 72
Collin Morikawa 4 4 4 4 5 3 4 3 4 5 2 5 5 3 4 4 4 5 72
Henrik Stenson 4 4 5 5 4 3 4 4 3 4 3 4 6 3 4 4 4 4 72
Hideki Matsuyama 4 4 4 4 5 3 5 3 4 4 3 4 5 4 3 5 4 4 72
J.J. Spaun 4 4 4 4 5 3 4 3 4 4 3 4 5 3 5 4 4 5 72
Jason Dufner 4 5 4 4 5 3 4 4 4 4 3 4 4 3 4 4 4 5 72
Jesse Mueller 4 5 3 4 6 4 5 3 4 2 3 4 5 3 4 5 3 5 72
John Daly 3 4 4 4 4 3 4 4 4 3 3 4 5 4 4 5 5 5 72
Jordan Spieth 4 4 4 4 5 4 3 3 4 4 3 3 5 3 5 5 4 5 72
Keegan Bradley 4 4 4 4 6 4 4 3 4 3 4 4 5 3 4 4 4 4 72
Keith Mitchell 3 4 4 4 5 3 4 3 3 4 3 4 4 4 5 5 5 5 72
Kevin Kisner 3 5 4 4 5 4 5 3 4 4 3 4 5 3 3 5 4 4 72
Lanto Griffin 4 4 4 4 4 3 4 5 4 5 3 4 5 2 4 4 4 5 72
Laurie Canter 4 4 4 4 4 3 4 3 4 5 3 4 6 3 5 4 4 4 72
Marc Leishman 4 4 4 4 5 3 4 4 3 5 3 4 5 3 4 5 4 4 72
Yuki Inamori 4 5 4 4 5 3 4 4 4 4 3 4 4 3 4 4 4 5 72
Adam Hadwin 4 4 3 5 5 3 4 3 4 4 3 5 6 4 4 3 4 5 73
Alex Beach 4 4 4 3 5 4 3 3 5 3 4 4 5 3 5 5 4 5 73
Anirban Lahiri 4 4 4 5 7 3 4 3 4 5 2 4 5 3 4 4 4 4 73
Branden Grace 4 4 4 5 5 3 4 3 5 4 3 4 4 4 3 5 4 5 73
Christiaan Bezuidenhout 4 4 4 4 5 3 4 3 4 5 3 4 4 4 6 4 4 4 73
Daniel Berger 4 5 4 4 5 3 4 3 4 5 3 4 5 3 4 4 4 5 73
Denny McCarthy 4 5 4 5 5 3 4 3 4 5 3 4 4 3 4 4 4 5 73
Dustin Johnson 4 5 4 4 5 3 4 3 4 3 4 5 5 3 5 4 4 4 73
Jhonattan Vegas 3 5 4 4 4 3 4 3 5 4 3 4 5 4 5 5 4 4 73
Jinichiro Kozuma 4 4 4 4 4 3 3 3 5 4 4 5 4 4 4 4 5 5 73
Joel Dahmen 3 5 4 4 5 3 5 4 4 4 4 4 4 3 3 5 4 5 73
Jon Rahm 5 3 4 4 4 3 4 5 4 4 3 4 6 3 4 4 5 4 73
Louis Oosthuizen 3 6 4 4 4 3 5 3 5 3 2 4 7 3 4 5 4 4 73
Matt Jones 4 4 5 4 6 3 4 3 4 5 3 4 5 3 3 4 4 5 73
Matthew Borchert 3 4 4 4 5 4 5 4 4 4 3 4 4 4 4 5 4 4 73
Maverick McNealy 4 5 4 4 6 3 4 3 4 4 4 4 5 3 3 5 3 5 73
Min Woo Lee 4 4 4 4 6 3 5 3 5 4 4 4 4 3 3 4 4 5 73
Rich Beem 4 5 4 5 5 4 4 3 3 4 3 4 5 3 4 5 4 4 73
Ryan Palmer 4 5 4 4 4 3 4 3 4 4 3 3 6 3 4 5 4 6 73
Sergio Garcia 4 6 3 3 5 3 4 3 4 4 3 4 5 3 4 5 5 5 73
Troy Merritt 4 5 4 3 5 4 5 4 5 4 3 4 5 3 4 4 4 3 73
Brian Harman 4 4 4 4 6 3 4 3 4 5 4 5 6 3 4 4 2 5 74
Cameron Champ 3 6 5 4 4 3 4 3 4 4 3 4 5 4 4 4 5 5 74
Daniel van Tonder 4 4 6 3 5 3 4 3 4 5 3 5 5 3 4 4 4 5 74
Garrick Higgo 4 4 5 4 5 3 5 4 4 4 3 4 4 3 3 5 5 5 74
Harry Higgs 5 4 4 4 5 3 3 4 4 4 2 4 5 5 3 5 5 5 74
Hudson Swafford 4 5 4 5 5 3 4 4 4 4 4 4 5 4 3 4 4 4 74
Jason Kokrak 3 5 4 4 5 3 4 3 5 4 4 4 5 4 4 4 5 4 74
Luke List 4 4 4 4 7 2 4 4 4 3 3 4 5 4 4 4 5 5 74
Richard Bland 4 4 4 4 7 3 4 3 4 5 4 4 5 3 4 4 4 4 74
Rikuya Hoshino 4 3 4 6 5 2 5 2 4 5 3 5 5 3 4 5 4 5 74
Russell Knox 4 5 4 4 6 3 5 3 4 4 3 4 5 3 6 4 3 4 74
Sam Horsfield 3 5 4 4 4 3 3 4 4 5 3 5 5 3 4 6 4 5 74
Sebastián Muñoz 5 4 3 4 6 3 4 3 4 5 4 4 5 3 4 4 4 5 74
Tiger Woods 5 5 3 5 5 3 4 4 5 3 3 4 5 2 5 4 4 5 74
Zach Johnson 4 5 4 4 5 3 5 4 4 6 3 4 5 3 3 4 4 4 74
Billy Horschel 4 5 4 6 5 4 4 3 4 4 3 5 5 4 4 3 4 4 75
Brooks Koepka 5 4 5 5 5 3 4 4 5 4 3 4 5 4 3 4 4 4 75
Erik van Rooyen 4 3 5 4 5 3 5 4 5 4 3 4 6 3 3 4 5 5 75
Kyle Mendoza 4 4 4 4 6 4 4 3 4 3 3 5 5 3 5 6 3 5 75
Lee Westwood 5 5 4 5 4 3 5 4 5 5 3 4 5 3 4 4 3 4 75
Lucas Glover 4 4 4 4 5 3 4 3 5 4 3 5 5 4 4 4 5 5 75
Ryan Vermeer 4 5 4 4 5 3 5 4 5 3 3 4 6 3 4 4 4 5 75
Sadom Kaewkanjana 4 5 4 5 5 3 4 4 4 5 3 4 5 3 4 4 4 5 75
Bio Kim 4 4 5 4 5 3 4 4 4 5 3 4 5 2 4 5 6 5 76
Corey Conners 4 4 4 4 5 3 5 4 4 5 3 4 5 4 6 4 4 4 76
Ian Poulter 4 4 4 4 6 3 5 3 4 4 3 5 4 5 4 5 4 5 76
Martin Kaymer 4 4 5 5 5 4 5 4 4 4 3 4 4 4 5 5 3 4 76
Matthew Wolff 5 6 5 5 5 2 3 3 4 4 4 4 5 4 4 5 4 4 76
Patrick Cantlay 4 5 3 5 6 3 4 4 4 4 3 5 6 3 3 4 5 5 76
Ryan Brehm 4 4 6 4 5 3 3 4 4 4 4 4 5 3 5 4 5 5 76
Shaun Micheel 4 5 5 4 5 3 4 4 4 3 3 5 4 4 4 6 4 5 76
Adam Scott 3 4 4 5 4 3 5 3 5 6 4 4 4 4 3 4 8 4 77
Chad Ramey 3 4 4 4 5 4 5 4 4 4 3 4 5 4 5 4 5 6 77
Mackenzie Hughes 4 6 4 4 6 3 4 4 4 4 3 4 5 3 5 4 5 5 77
Pablo Larrazábal 3 4 4 4 5 3 6 4 5 5 4 5 5 3 4 4 4 5 77
Padraig Harrington 4 6 3 5 5 3 4 4 4 5 3 3 5 4 5 5 4 5 77
Takumi Kanaya 4 4 6 4 5 4 4 3 4 5 3 5 4 3 4 5 4 6 77
Tim Feenstra 4 5 5 4 7 3 3 3 4 3 4 3 4 5 4 6 5 5 77
Wyatt Worthington II 4 4 4 4 5 4 5 4 4 5 3 4 5 3 5 4 5 5 77
Austin Hurt 5 4 4 5 4 3 4 2 5 4 5 4 5 4 4 4 7 5 78
Brandon Bingaman 4 4 3 5 5 3 5 4 4 5 3 6 5 3 4 5 4 6 78
Colin Inglis 4 6 4 5 6 4 4 3 5 4 3 5 5 3 4 4 5 4 78
Dylan Newman 4 5 4 6 5 3 5 4 5 4 3 4 5 6 3 4 4 4 78
Joohyung Kim 4 5 4 4 6 4 4 4 5 4 3 5 5 4 4 5 3 5 78
Michael Block 5 5 4 4 5 3 4 3 4 3 3 4 5 4 6 6 6 4 78
Nic Ishee 4 5 3 4 5 4 4 4 4 4 3 6 5 3 4 4 5 7 78
Nicolai Højgaard 4 4 4 5 5 3 4 4 5 5 2 4 5 4 4 4 7 5 78
Oliver Bekker 4 4 5 4 5 4 4 3 5 4 3 5 5 3 5 4 6 5 78
Paul Dickinson 3 5 4 4 5 5 4 4 5 4 4 5 7 4 3 3 5 4 78
Scott Stallings 4 4 5 5 6 3 4 3 4 4 4 5 5 3 4 5 5 5 78
Shawn Warren 5 5 5 4 5 3 5 4 4 3 3 5 5 3 4 5 5 5 78
Carlos Ortiz 4 6 4 4 6 3 4 4 3 4 4 5 5 5 4 5 4 5 79
Casey Pyne 5 5 4 4 6 3 4 5 3 5 3 5 5 4 5 5 4 4 79
Jared Jones 4 4 5 4 5 5 4 3 4 4 3 4 6 3 6 5 5 5 79
Ryosuke Kinoshita 5 4 4 4 5 4 5 3 4 6 3 4 4 6 4 5 4 5 79
Tyler Collet 5 5 5 5 5 3 4 4 4 4 3 5 5 4 5 4 5 4 79
Zac Oakley 6 5 5 4 5 4 5 3 5 5 3 4 6 4 5 4 4 4 81
Sean McCarty 5 5 4 5 5 3 4 4 4 4 5 4 5 4 5 4 6 6 82

While the scores for the entire tournament are nice, we only really care about the players each person in the pool drafted. I had my buddies list their picks in a shared google sheet. Let’s read in the data and subset our data to only include players in the pool.

picks = read.delim(file = "picks.txt")

picks %>%
  arrange(Picked.By, player) %>%
  print_tbl()
player Picked.By
Alex Noren Bray
Cameron Young Bray
Jordan Spieth Bray
Matt Kuchar Bray
Tony Finau Bray
Will Zalatoris Bray
Billy Horschel Bret
Cameron Smith Bret
Hideki Matsuyama Bret
Kevin Kisner Bret
Marc Leishman Bret
Talor Gooch Bret
Jason Kokrak Craig
Jon Rahm Craig
Maverick McNealy Craig
Rickie Fowler Craig
Sam Burns Craig
Tiger Woods Craig
Adam Scott Eric
Louis Oosthuizen Eric
Matt Fitzpatrick Eric
Scottie Scheffler Eric
Sebastián Muñoz Eric
Sergio Garcia Eric
Dustin Johnson Jacko
Harold Varner III Jacko
Jason Day Jacko
Seamus Power Jacko
Tyrrell Hatton Jacko
Xander Schauffele Jacko
Aaron Wise Jordan
Brooks Koepka Jordan
Cameron Champ Jordan
Corey Conners Jordan
Justin Rose Jordan
Justin Thomas Jordan
Collin Morikawa Mike
Davis Riley Mike
Erik van Rooyen Mike
Gary Woodland Mike
Max Homa Mike
Shane Lowry Mike
K.H. Lee Rocco
Mackenzie Hughes Rocco
Patrick Cantlay Rocco
Russell Henley Rocco
Tommy Fleetwood Rocco
Viktor Hovland Rocco
Abraham Ancer Trev
Daniel Berger Trev
Joaquin Niemann Trev
Robert MacIntyre Trev
Rory McIlroy Trev
Si Woo Kim Trev
score_data = score_data %>%
  right_join(picks, by = "player")

Automation

For mid round updates, I like to set up a cronR job to call a build.R script which does the following.

  1. Call the API
  2. Clean the data
  3. Send the data to a Google Sheet which creates a dashboard.

I have found cronR to work extremely well allowing for automated updates every 15 minutes.

To send the data to a Google Sheet, I use the googlesheets4::sheet_write() function. Once the data is in the Google Sheet it is just a matter of coordinating the data into nice readable tables for the other participants to access.

If you’re feeling lucky, you can view the Google Sheet here. A fair warning that the sheet is likely broken by the time you visit the site due to the changing nature of the API.

Google Sheet Dashboard

Round 1 Pool Results

Team Leaderboard

First lets view the scores per team.

tbl_data = score_data %>%
  arrange(hole_list) %>%
  tidyr::pivot_wider(id_cols = c(player, Picked.By), names_from = hole_list, values_from = value, values_fill = NULL) %>%
  mutate(score = rowSums(select(., -c("player", "Picked.By")))) %>%
  group_by(Picked.By, player) %>%
  arrange(score) %>%
  ungroup

tbl_data %>%
  arrange(Picked.By, score) %>%
  select(-Picked.By) %>%
  kbl() %>%
  kable_paper("striped", full_width = T) %>% 
  pack_rows(index = table(tbl_data$Picked.By)) %>%
  scroll_box(height = "500px")
player 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 score
Bray
Will Zalatoris 4 4 3 4 5 4 3 3 3 3 3 3 4 3 4 4 4 5 66
Matt Kuchar 3 5 4 5 5 3 4 3 3 4 3 4 4 3 3 3 4 4 67
Tony Finau 4 3 4 4 5 3 4 3 4 5 3 4 4 3 4 4 4 4 69
Alex Noren 3 4 4 5 4 3 4 4 4 4 4 4 5 3 4 4 3 4 70
Cameron Young 3 4 4 4 5 3 4 4 4 4 3 4 5 4 5 4 3 4 71
Jordan Spieth 4 4 4 4 5 4 3 3 4 4 3 3 5 3 5 5 4 5 72
Bret
Cameron Smith 3 3 3 4 4 3 3 4 4 4 2 6 4 3 4 5 5 4 68
Talor Gooch 3 4 4 4 4 3 5 3 3 4 3 4 5 3 4 4 5 4 69
Hideki Matsuyama 4 4 4 4 5 3 5 3 4 4 3 4 5 4 3 5 4 4 72
Marc Leishman 4 4 4 4 5 3 4 4 3 5 3 4 5 3 4 5 4 4 72
Kevin Kisner 3 5 4 4 5 4 5 3 4 4 3 4 5 3 3 5 4 4 72
Billy Horschel 4 5 4 6 5 4 4 3 4 4 3 5 5 4 4 3 4 4 75
Craig
Sam Burns 5 4 4 4 5 3 4 3 4 4 3 5 5 3 4 4 3 4 71
Rickie Fowler 5 4 4 4 5 3 3 3 4 5 3 4 5 4 4 4 3 4 71
Jon Rahm 5 3 4 4 4 3 4 5 4 4 3 4 6 3 4 4 5 4 73
Maverick McNealy 4 5 4 4 6 3 4 3 4 4 4 4 5 3 3 5 3 5 73
Tiger Woods 5 5 3 5 5 3 4 4 5 3 3 4 5 2 5 4 4 5 74
Jason Kokrak 3 5 4 4 5 3 4 3 5 4 4 4 5 4 4 4 5 4 74
Eric
Matt Fitzpatrick 3 3 5 4 5 2 5 3 4 4 2 4 5 3 4 4 4 4 68
Scottie Scheffler 4 4 4 4 3 3 4 3 5 3 3 5 6 3 3 5 5 4 71
Louis Oosthuizen 3 6 4 4 4 3 5 3 5 3 2 4 7 3 4 5 4 4 73
Sergio Garcia 4 6 3 3 5 3 4 3 4 4 3 4 5 3 4 5 5 5 73
Sebastián Muñoz 5 4 3 4 6 3 4 3 4 5 4 4 5 3 4 4 4 5 74
Adam Scott 3 4 4 5 4 3 5 3 5 6 4 4 4 4 3 4 8 4 77
Jacko
Xander Schauffele 4 4 4 4 5 2 4 3 4 3 3 4 4 4 3 4 4 5 68
Tyrrell Hatton 4 4 4 4 5 3 4 4 3 4 3 4 5 4 3 4 5 3 70
Seamus Power 4 4 4 4 6 3 4 3 4 5 3 3 5 4 3 4 4 4 71
Jason Day 4 4 4 4 5 3 5 3 4 4 3 4 4 3 4 5 4 4 71
Harold Varner III 4 5 3 4 4 4 4 4 5 4 3 4 4 2 4 4 4 5 71
Dustin Johnson 4 5 4 4 5 3 4 3 4 3 4 5 5 3 5 4 4 4 73
Jordan
Justin Thomas 3 4 4 4 4 3 4 4 5 3 3 4 5 3 3 4 4 3 67
Aaron Wise 5 4 4 3 4 3 3 3 5 4 4 5 4 3 3 4 4 4 69
Justin Rose 4 5 4 5 4 3 5 3 4 4 3 4 4 2 3 4 5 5 71
Cameron Champ 3 6 5 4 4 3 4 3 4 4 3 4 5 4 4 4 5 5 74
Brooks Koepka 5 4 5 5 5 3 4 4 5 4 3 4 5 4 3 4 4 4 75
Corey Conners 4 4 4 4 5 3 5 4 4 5 3 4 5 4 6 4 4 4 76
Mike
Davis Riley 5 4 4 4 4 4 3 3 4 4 3 3 4 3 3 4 4 5 68
Max Homa 4 4 4 5 6 3 4 2 4 4 3 3 4 2 4 4 4 6 70
Gary Woodland 4 4 5 3 4 3 4 3 4 4 3 4 6 3 4 5 3 4 70
Shane Lowry 4 5 4 3 5 3 4 3 4 5 3 3 5 4 4 4 3 4 70
Collin Morikawa 4 4 4 4 5 3 4 3 4 5 2 5 5 3 4 4 4 5 72
Erik van Rooyen 4 3 5 4 5 3 5 4 5 4 3 4 6 3 3 4 5 5 75
Rocco
K.H. Lee 3 5 4 4 4 3 4 3 4 5 3 4 5 3 4 4 4 3 69
Viktor Hovland 4 3 4 5 5 3 4 3 4 4 3 4 5 3 4 4 4 4 70
Russell Henley 3 4 4 4 5 3 3 3 4 4 4 4 5 3 4 4 4 5 70
Tommy Fleetwood 4 4 5 4 5 3 4 2 4 3 4 4 5 3 4 5 4 4 71
Patrick Cantlay 4 5 3 5 6 3 4 4 4 4 3 5 6 3 3 4 5 5 76
Mackenzie Hughes 4 6 4 4 6 3 4 4 4 4 3 4 5 3 5 4 5 5 77
Trev
Rory McIlroy 4 3 4 4 4 4 4 4 3 4 3 3 4 2 3 4 4 4 65
Abraham Ancer 4 5 3 4 4 3 3 3 4 3 4 4 5 3 3 5 3 4 67
Joaquin Niemann 4 5 4 4 5 3 3 4 3 3 3 4 4 3 4 4 4 4 68
Robert MacIntyre 5 4 4 4 5 3 4 4 4 3 3 4 4 3 4 4 4 4 70
Si Woo Kim 4 4 4 3 4 3 5 4 4 4 3 5 5 3 3 5 4 4 71
Daniel Berger 4 5 4 4 5 3 4 3 4 5 3 4 5 3 4 4 4 5 73

And team totals - recall we take the four lowest scores per team.

score_data %>%
  group_by(Picked.By, player) %>%
  summarise(score = sum(value)) %>%
  ungroup(player) %>%
  arrange(Picked.By, score) %>%
  mutate(order = 1:6) %>%
  filter(order %in% 1:4) %>%
  summarise(team_score = sum(score) - 70*4) %>%
  arrange(team_score) %>%
  kbl(col.names = c("Team", "Total Score")) %>%
  kable_paper("striped", full_width = FALSE)
Team Total Score
Trev -10
Bray -8
Mike -2
Jacko 0
Rocco 0
Bret 1
Jordan 1
Eric 5
Craig 8

Horse Race

Now for the fun part. Determining which players are eliminated in our retroactive horse race side bet.

# function to determine largest score per hole. 
# | Hole | Scores | Label (name if highest score) |

# store horses in a stack
# remove from stack if eliminated

horses = unique(score_data$player)
holes = sort(unique(score_data$hole_list))
race = list()
for(hole in holes) {
  
  tmp = score_data[score_data$hole_list == hole, ]
  tmp = tmp[tmp$player %in% horses, ] # remove players from hole whove lost
  
  if(nrow(tmp) == 0){ 
    break
  }
  
  max_score = max(tmp$value)
  eliminated = tmp[tmp$value == max_score, ]$player # get players who are eliminated
  horses = horses[!horses %in% eliminated]
  
  tmp$max_score = max_score
  tmp$eliminated = paste(eliminated, collapse = ", ")
  
  out = tmp
  
  # out = data.frame(hole = hole, 
  #                  max_score = max_score, 
  #                  n = length(eliminated),
  #                  eliminated = paste(eliminated, collapse = ", "))
  race[[length(race) + 1]] = out
  
}
race = race %>% bind_rows()

The below plot lets you see which players were eliminated, as well as the scores of the players who remained in the horse race.

p = race %>%
  mutate(names = case_when(value == max_score ~ stringr::str_wrap(string = race$eliminated, 
                                   width = 20, 
                                   indent = 1,
                                   exdent = 0), 
                                TRUE ~ player)) %>%
  ggplot(aes(x = hole_list, y = max_score, label = names)) + 
  geom_jitter(aes(x = hole_list, y = value), height = 0, width = 0.1, alpha = 0.2, color = "lightblue") + 
  geom_point(color = "darkblue", size = 2) + 
  scale_x_continuous(breaks = 0:12) + 
  ylim(c(1, 7)) + 
  labs(title = "Horse Race - Round 1 Outcomes",
       y = "", 
       x = "")

plotly::ggplotly(p, tooltip = c("names"))
race %>%
  select(hole_list, max_score, eliminated) %>%
  group_by(hole_list) %>%
  slice(1L) %>%
  kbl(col.names = c("Hole", "Max Score", "Eliminated Players")) %>%
  kable_paper("striped", full_width = T)
Hole Max Score Eliminated Players
1 5 Davis Riley, Aaron Wise, Robert MacIntyre, Sam Burns, Rickie Fowler, Jon Rahm, Tiger Woods, Sebastián Muñoz, Brooks Koepka
2 6 Louis Oosthuizen, Sergio Garcia, Cameron Champ, Mackenzie Hughes
3 5 Matt Fitzpatrick, Gary Woodland, Tommy Fleetwood, Erik van Rooyen
4 6 Billy Horschel
5 6 Max Homa, Seamus Power, Maverick McNealy, Patrick Cantlay
6 4 Rory McIlroy, Will Zalatoris, Harold Varner III, Jordan Spieth, Kevin Kisner
7 5 Talor Gooch, Justin Rose, Si Woo Kim, Jason Day, Hideki Matsuyama, Corey Conners, Adam Scott
8 4 Justin Thomas, Cameron Smith, Joaquin Niemann, Alex Noren, Tyrrell Hatton, Cameron Young, Marc Leishman
9 5 Scottie Scheffler, Jason Kokrak
10 5 Tony Finau, K.H. Lee, Shane Lowry, Collin Morikawa, Daniel Berger
11 4 Abraham Ancer, Russell Henley, Dustin Johnson
12 4 Matt Kuchar, Xander Schauffele, Viktor Hovland

Skins

Skins are awarded when a single player makes the lowest score on a given hole.

score_data %>%
  group_by(hole_list) %>%
  mutate(min_score = min(value)) %>%
  filter(value == min_score) %>%
  mutate(n = n()) %>%
  filter(n == 1) %>%
  select(-c(n, min_score)) %>%
  kbl(col.names = c("Player", "Hole", "Score", "Team")) %>%
  kable_paper("striped", full_width = F)
Player Hole Score Team
Scottie Scheffler 5 3 Eric

Eric won a skin for Scott Scheffler’s eagle on the fifth hole. See the clip on Instagram here.